/*
 *  ckr_spec_spec_listener_specs.cpp
 *  ckrSpec
 *
 *  Created by C. Keith Ray on 2006.11.08.
 *  Copyright 2006 __MyCompanyName__. All rights reserved.
 *
 */

#import "ckr_spec_cpp_specs.h"
#import "ckr_spec_cpp.h"

#include <iostream>
#include <sstream>
#include <vector>
#include <deque>
#include <algorithm>

#include <assert.h>

using namespace std;
using namespace ckr;

//  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

static void listener_hears_spec_start_end();

//  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

void run_spec_listener_specs()
{
	listener_hears_spec_start_end();
}

//  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

class PassingFakeContext : public Context
{
public: 
	PassingFakeContext() : Context( "PassingFakeContext", __LINE__, __FILE__ )
	{ };

	virtual double duration() const
	{
		return 1.0;
	};

	void spec()
	{
	};
};

//  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

static void listener_hears_spec_start_end()
{
	RecordingStartEndSpecListener	aListener;
	SpecRunner					aRunner;
	PassingFakeContext		aContext;

	aRunner.add( & aContext );
	aRunner.runAll( & aListener );

	std::string expected = "specStarted(PassingFakeContext); "
		"specEnded(PassingFakeContext,1); ";
	std::string actual = aListener.log.str();

	assert( expected == actual );
}

//  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

